#include <signal.h>
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

void sigroutine(int dunno)
{
    switch (dunno)
    {
    case 1:
        printf("Capture SIGHUP signal, the signal number is %d\n", dunno);
        break;
    case 2:
        printf("Capture SIGINT signal, the signal number is %d\n", dunno);
        break;
    case 3:
        printf("Capture SIGQUIT signal, the signal number is %d\n", dunno);
        break;
    }
    return;
}

int main(void)
{
    printf("process ID is %d\n", getpid());
    if (signal(SIGHUP, sigroutine) == SIG_ERR)
        printf("Coulde't register signal handler for SIGHUP!\n");
    if (signal(SIGINT, sigroutine) == SIG_ERR)
        printf("Couldn't register signal handler for SIGINT!\n");
    if (signal(SIGQUIT, sigroutine) == SIG_ERR)
        printf("Couldn't register signal handler for SIGQUIT!\n");
    while (1)
        sleep(1);
    return 0;
}

//分别对应输入ctrl+c    ctrl+\      ctrl+z(进程置于后台)

//想要输出case 1的语句先使用ctrl+z 将进程至于后台后使用     kill -HUP ID    向进程发送SIGHUP信号
//然后使用      kill -9 ID
//向进程发送SIGKILL信号，终止进程

//以下是不能打印case 1的分析和处理
//当您使用Ctrl+Z将进程置于后台时，该进程会收到SIGTSTP信号，标识为停止信号。在这种情况下，后台进程将被挂起，不会执行任何代码，包括信号处理函数。
//另外打开一个终端，然后执行            kill -HUP ID            可以打印case 1了，注意，记得终止进程